一休 Frontend Meetup 2025-02-10
https://gyazo.com/afdba432077df09f2c44bbcabc973e47
一休 Frontend Meetup - connpass
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
一休の会員基盤リニューアル(2021年)
ログインの実装が各サービスに分散・多重実装していた
新しいサービスを作るのに障壁
会員基盤をマイクロサービス化
ログインコンポーネントを提供
どのようにつくるか
考えること
サービス全体で使えること
ページ遷移を挟まずにログインできる
予約入力している途中でログインページへ遷移すると予約体験を損ねてします
どのアプリケーションプラットフォームでも使えること
Vue.js
React
Jinja
ASP.NET
Web Componentsで出力するためVue.jsで実装する
Vue CLI
https://github.com/vuejs/vue-web-component-wrapper
Vue3
defineCustomElement
配信における最適化
不要なコードをバンドルしない
scoped cssを使っていた
スタイルが共通化されてなくて重複してしまう
Uno CSSを使う
ビルド時に必要なクラスだけ生成される
圧縮による配信サイズの削減
gzipからbrotilへ
IE11が廃止になったため
Webパフォーマンス改善 〜宿泊予約サービスでの取り組み〜
国内宿泊予約サービス
2000年5月リリース(今年25周年)
エンドユーザー向け画面の改善
Fastlyを経由して第一世代・第二世代のシステム(Googleにインデックスされているもの)へ経由
Nuxt
GraphQL
マイクロサービス(Go)
検索DB
期間DB
Webパフォーマンス改善特徴
主体的に改善を行う(気になったときに着手)
Core Web Vitalsの3指標
LCP、CLSは現状維持
INPは改善未着手
計測可視化環境
フロントエンド
Google Analytics
BigQuery
Looker Studio
web-vitals.js、Google アナリティクス、BigQuery を使用してパフォーマンスを測定する | Google Codelabs
サーバーサイド
Datadogで計測
画像最適化
Imgix
auto=format
w,h
Intersection Observer、loading=lazy
iOS15サポートしているので移行しづらい
ネットワーク最適化
バッチクエリ
複数のクエリを1つに束ねる
ペイロードが6つ返ってくる
インメモリキャッシュ
クエリごとにキャッシュする
モジュール遅延読み込み
レイアウトシフトの最適化
スケルトンスクリーン
情報収集
https://gyazo.com/7b1dee6ca48bd79d0ee899304a2b2862
mozaic.fm
MDN Web DocsのWebパフォーマンス
https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/speed/metrics_changelog
CrUX Dashboard
HTTP Archive CrUX
GitHub - rviscomi/capo.js: Get your <head> in order
拡張機能
GitHub - nucliweb/webperf-snippets: ⚡️ 💾 Web Performance Snippets
一休の世界観を形にする、ガイドラインとデザインシステム
Yahoo! トラベルとは雰囲気に差異がある
厳選された上質な施設にふさわしい高級感のあるUI
なぜガイドラインが必要?
それぞれでデザインして統一感・一貫性がなかった
トップ - IKYU Design Guideline
フォント
基本的にはヒラギノ角ゴシック
上品さ・高級感を伝えたい場合は明朝体
余白
ゆったりした値を扱う
画像
高品質な写真を選定
適切なトリミングや色調補正のルール
デザインシステム
ガイドライン→全社デザインシステム→プロダクトデザインシステムという展開
デザイントークンはFigma Variables
npm packagesで配布
アイコンやブランドロゴも共通のもの化
苦労
カラーパレット作成
中間色を採用すると違和感があった
プロダクトで違った解釈でやっていたので一新はしない
全社共通のカラーは最低限のものに留める
コンポーネントの継続した見直し
デザインの意図を共有
共通化の判断
デザイナー・エンジニアとで見直しを定例化している
成果
共通言語で会話できるようになった
一貫した世界観の共有
本質的なユーザー体験の検討に集中
広報・営業も世界観の言語化がアウトプットに役立っている
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
RESZAIKO
飲食店向け予約DXのSaaS
サイトコントローラー
Web予約
予約台帳
予約管理(チャート)
店舗レイアウト
顧客管理
在庫管理機能(チャート・カレンダー)
印刷機能
インタラクティブUIの基礎
absolute
transform
オブジェクトの移動は連続する移動量(delta)を使用する
移動量
PointerEvents
@use-gesture
Canvasの使い所
Canvas
描画コストの高いもの
グリッド
背景・複雑な図形
そのほかDOM
操作対象のオブジェクトなどアクセシビリティを確保したい
アクセシビリティを意識する
DOMを使い合わせる
buttonを使うことでタブフォーカスができるようになる
座標・サイズ計算
ロジックを純粋関数で切り出す(inがあったらoutは一致する形)
レイヤーで考えるコンポーネントを設計する
レイヤーごとで責務を分けることで、重なりの表現や表示の切り替え、などの管理がしやすくなる
2025-02-10